When Global Navigation Satellite Systems (GNSS) receivers receive signals from satellites, the receivers process the satellite signal by down-converting the signal to the baseband and also despreading the signal. In certain implementations, to down convert and despread the signal, a GNSS receiver uses numerically controlled oscillators (NCO). For example, the GNSS receiver has a carrier NCO that provides an oscillatory signal that is used to down convert a signal from an intermediate frequency (IF) to a baseband frequency. Also, the GNSS receiver has a code NCO that is used to remove a code (like a pseudorandom noise code) from the baseband signal.
To set the frequency of the oscillatory signal for both the carrier and code NCOs, digital control signals are provided that indicate the frequency that should be used to down-convert the IF signal to baseband and remove the code. A control signal is represented by an integer step size, which is periodically added to an internal NCO counter. A NCO rate is determined by impulses generated when the internal NCO counter overflows. However, because the NCO and its control signal are digital, the accuracy and precision of the NCOs are limited by the number of bits allocated to the NCO's internal counter. The higher the number of allocated bits, the finer the resolution of the generated impulses period. Thus, the desired NCO rate is represented by a quantized representation of different frequency levels. Due to the quantized frequency rates, the NCO is not always able to accurately provide oscillating signals at the IF or the code frequency. When an NCO is unable to accurately represent the IF or the code frequency, a quantization error that affects the accuracy of the GNSS receiver accumulates over an update period for the NCO.